package com.sky.upload;

import cn.hutool.core.util.IdUtil;
import com.sky.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.dromara.x.file.storage.core.FileInfo;
import org.dromara.x.file.storage.core.FileStorageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

@Slf4j
@RestController
@RequestMapping("/admin/common")
public class UploadController {

    //注入实列
    @Autowired
    private FileStorageService fileStorageService;

    /**
     * 通用上传请求（单个）
     *
     * @param file
     * @return 图片的ulr地址
     */
    @PostMapping("/upload")
    public Result uploadFile(MultipartFile file) {
        if (file.isEmpty()) {
            return Result.error("上传文件不能为空");
        }
        try {
            // 获取原始文件名，比如：1.png 2.jpg 1.2.3.4.png
            String orgName = file.getOriginalFilename();

            // 创建保存的路径按照 年月日的方式分文件夹
            String dirName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM", Locale.CHINA)) + "/";

            // 填写Object完整路径，完整路径中不能包含Bucket名称，例如exampledir/exampleobject.txt。
            String objectName = IdUtil.fastSimpleUUID() + orgName.substring(orgName.lastIndexOf("."));

            // 上传图片，成功返回文件信息
            FileInfo fileInfo = fileStorageService.of(file).setPath(dirName).setName(objectName).upload();

            // 设置返回结果
            return Result.success(fileInfo.getUrl());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}